package com.example.sword;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Test42 {

    public static void main(String[] args) {
        System.out.println("haha");
    }


//    异或  相同为0   不相同为1

    /**
     * 输入一个递增排序的数组和一个数字S，在数组中查找两个数，使得他们的和正好是S，如果有多对数字的和等于S，输出两个数的乘积最小的。
     *
     *
     * a + b = s;
     * (a - m ) + (b + m) = s
     * 则：(a - m )(b + m)=ab - (b-a)m - m*m < ab；说明外层的乘积更小
     */

    //
    public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {

        ArrayList<Integer> res = new ArrayList<>();

        //外层乘积最小
        int left = 0,right = array.length-1;

        while (left<right){

            int sum1 = array[left]+array[right];
            if (sum1==sum){
                res.add(array[left]);
                res.add(array[right]);
                //找到了立即返回  因为这就是最外层的
                return res;
            }else if (sum1<sum){
                left++;
            }else {
                right--;
            }
        }

        return res;

    }


}
